
        <html>
			<head>
			     <title>Iptables入门教程 - zhangsan</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/1424">http://drops.wooyun.org/tips/1424</a></h1>
				
      <p>
        <h2>0x00 iptables介绍</h2>

<hr />

<p>linux的包过滤功能，即linux防火墙，它由netfilter 和 iptables 两个组件组成。</p>

<p>netfilter 组件也称为内核空间，是内核的一部分，由一些信息包过滤表组成，这些表包含内核用来控制信息包过滤处理的规则集。</p>

<p>iptables 组件是一种工具，也称为用户空间，它使插入、修改和除去信息包过滤表中的规则变得容易。</p>

<!--more-->

<p><img src="http://static.wooyun.org/201404/2014041522224868618.png" alt="2014041522224868618.png" /></p>

<h2>0x01 iptables的结构</h2>

<hr />

<p>iptables的结构：</p>

<pre><code>iptables -&gt; Tables -&gt; Chains -&gt; Rules
</code></pre>

<p>简单地讲，tables由chains组成，而chains又由rules组成。iptables 默认有四个表Filter, NAT, Mangle, Raw，其对于的链如下图。</p>

<p><img src="http://static.wooyun.org/20140714/2014071403584011695.jpg" alt="enter image description here" /></p>

<h2>0x02 iptables工作流程</h2>

<hr />

<p><img src="http://static.wooyun.org/20140714/2014071403583754959.jpg" alt="enter image description here" /></p>

<h2>0x03 filter表详解</h2>

<hr />

<h3>1. 在iptables中，filter表起过滤数据包的功能，它具有以下三种内建链：</h3>

<pre><code>INPUT链 – 处理来自外部的数据。 
OUTPUT链 – 处理向外发送的数据。 
FORWARD链 – 将数据转发到本机的其他网卡设备上。 
</code></pre>

<h3>2. 数据流向场景</h3>

<p>访问本机：在INPUT链上做过滤</p>

<p>本机访问外部：在OUTPUT链上做过滤</p>

<p>通过本机访问其他主机:在FORWARD链上做过滤</p>

<h3>3. Iptables基本操作</h3>

<p>启动iptables：<code>service iptables start</code></p>

<p>关闭iptables：<code>service iptables stop</code></p>

<p>重启iptables：<code>service iptables restart</code></p>

<p>查看iptables状态：<code>service iptables status</code></p>

<p>保存iptables配置：<code>service iptables save</code></p>

<p>Iptables服务配置文件：<code>/etc/sysconfig/iptables-config</code></p>

<p>Iptables规则保存文件：<code>/etc/sysconfig/iptables</code></p>

<p>打开iptables转发：<code>echo "1"&gt; /proc/sys/net/ipv4/ip_forward</code></p>

<h2>0x04 iptables命令参考</h2>

<hr />

<p>命令：</p>

<pre><code>iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转] 
</code></pre>

<h3>1. 表名</h3>

<p>表名：<code>Filter, NAT, Mangle, Raw</code></p>

<p>起包过滤功能的为表Filter，可以不填，不填默认为Filter</p>

<h3>2. 命令选项</h3>

<table>
<thead>
<tr>
  <th align="center">选项名</th>
  <th align="center">功能及特点</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="center">-A</td>
  <td align="center">在指定链的末尾添加（--append）一条新的规则</td>
</tr>
<tr>
  <td align="center">-D</td>
  <td align="center">删除（--delete）指定链中的某一条规则，按规则序号或内容确定要删除的规则</td>
</tr>
<tr>
  <td align="center">-I</td>
  <td align="center">在指定链中插入（--insert）一条新的规则，默认在链的开头插入</td>
</tr>
<tr>
  <td align="center">-R</td>
  <td align="center">修改、替换（--replace）指定链中的一条规则，按规则序号或内容确定</td>
</tr>
<tr>
  <td align="center">-L</td>
  <td align="center">列出（--list）指定链中的所有的规则进行查看，默认列出表中所有链的内容</td>
</tr>
<tr>
  <td align="center">-F</td>
  <td align="center">清空（--flush）指定链中的所有规则，默认清空表中所有链的内容</td>
</tr>
<tr>
  <td align="center">-N</td>
  <td align="center">新建（--new-chain）一条用户自己定义的规则链</td>
</tr>
<tr>
  <td align="center">-X</td>
  <td align="center">删除指定表中用户自定义的规则链（--delete-chain）</td>
</tr>
<tr>
  <td align="center">-P</td>
  <td align="center">设置指定链的默认策略（--policy）</td>
</tr>
<tr>
  <td align="center">-n</td>
  <td align="center">用数字形式（--numeric）显示输出结果，若显示主机的 IP地址而不是主机名</td>
</tr>
<tr>
  <td align="center">-P</td>
  <td align="center">设置指定链的默认策略（--policy）</td>
</tr>
<tr>
  <td align="center">-v</td>
  <td align="center">查看规则列表时显示详细（--verbose）的信息</td>
</tr>
<tr>
  <td align="center">-V</td>
  <td align="center">查看iptables命令工具的版本（--Version）信息</td>
</tr>
<tr>
  <td align="center">-h</td>
  <td align="center">查看命令帮助信息（--help）</td>
</tr>
<tr>
  <td align="center">--line-number</td>
  <td align="center">查看规则列表时，同时显示规则在链中的顺序号</td>
</tr>
</tbody>
</table>

<h3>3. 链名</h3>

<p>可以根据数据流向来确定具体使用哪个链，在Filter中的使用情况如下：</p>

<pre><code>INPUT链 – 处理来自外部的数据。 
OUTPUT链 – 处理向外发送的数据。 
FORWARD链 – 将数据转发到本机的其他网卡设备上。
</code></pre>

<h3>4. 条件匹配</h3>

<p>条件匹配分为基本匹配和扩展匹配，拓展匹配又分为隐式扩展和显示扩展。</p>

<p>a)基本匹配包括：</p>

<table>
<thead>
<tr>
  <th align="center">匹配参数</th>
  <th align="center">说明</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="center">-p</td>
  <td align="center">指定规则协议，如tcp, udp,icmp等，可以使用all来指定所有协议</td>
</tr>
<tr>
  <td align="center">-s</td>
  <td align="center">指定数据包的源地址参数，可以使IP地址、网络地址、主机名</td>
</tr>
<tr>
  <td align="center">-d</td>
  <td align="center">指定目的地址</td>
</tr>
<tr>
  <td align="center">-i</td>
  <td align="center">输入接口</td>
</tr>
<tr>
  <td align="center">-o</td>
  <td align="center">输出接口</td>
</tr>
</tbody>
</table>

<p>b)隐式扩展包括：</p>

<p><img src="http://static.wooyun.org/20140714/2014071403584061278.jpg" alt="enter image description here" /></p>

<p>c)常用显式扩展</p>

<p><img src="http://static.wooyun.org/20140714/2014071403582276903.jpg" alt="enter image description here" /></p>

<h3>5. 目标值</h3>

<p>数据包控制方式包括四种为：</p>

<pre><code>ACCEPT：允许数据包通过。 
DROP：直接丢弃数据包，不给出任何回应信息。 
REJECT：拒绝数据包通过，必须时会给数据发送端一个响应信息。 
LOG：在/var/log/messages 文件中记录日志信息，然后将数据包传递给下一条规则。 
QUEUE：防火墙将数据包移交到用户空间 
RETURN：防火墙停止执行当前链中的后续Rules，并返回到调用链(the calling chain) 
</code></pre>

<h2>0x05 Iptables常见命令</h2>

<hr />

<p>a) 1. 删除iptables现有规则</p>

<pre><code>iptables –F 
</code></pre>

<p>b) 2. 查看iptables规则</p>

<pre><code>iptables –L（iptables –L –v -n） 
</code></pre>

<p>c) 3. 增加一条规则到最后</p>

<pre><code>iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
</code></pre>

<p>d) 4.添加一条规则到指定位置</p>

<pre><code>iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
</code></pre>

<p>e) 5.  删除一条规则</p>

<pre><code>iptabels -D INPUT 2 
</code></pre>

<p>f) 6.修改一条规则</p>

<pre><code>iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
</code></pre>

<p>g) 7. 设置默认策略</p>

<pre><code>iptables -P INPUT DROP 
</code></pre>

<p>h) 8.允许远程主机进行SSH连接</p>

<pre><code>iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
</code></pre>

<p>i) 9.允许本地主机进行SSH连接</p>

<pre><code>iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A INTPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
</code></pre>

<p>j) 10.允许HTTP请求</p>

<pre><code>iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 
</code></pre>

<p>k) 11.限制ping 192.168.146.3主机的数据包数，平均2/s个，最多不能超过3个</p>

<pre><code>iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT 
</code></pre>

<p>l) 12.限制SSH连接速率(默认策略是DROP)</p>

<pre><code>iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT  
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT 
</code></pre>

<h2>0x06 如何正确配置iptables</h2>

<hr />

<p>a) 1. 删除现有规则</p>

<p>iptables -F</p>

<p>b) 2.  配置默认链策略</p>

<pre><code>iptables -P INPUT DROP 
iptables -P FORWARD DROP 
iptables -P OUTPUT DROP 
</code></pre>

<p>c) 3. 允许远程主机进行SSH连接</p>

<pre><code>iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT 
</code></pre>

<p>d) 4. 允许本地主机进行SSH连接</p>

<pre><code>iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT 
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT 
</code></pre>

<p>e) 5. 允许HTTP请求</p>

<pre><code>iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT 
</code></pre>

<h2>0x07 使用iptables抵抗常见攻击</h2>

<hr />

<h3>1.防止syn攻击</h3>

<p>思路一：限制syn的请求速度（这个方式需要调节一个合理的速度值，不然会影响正常用户的请求）</p>

<pre><code>iptables -N syn-flood 

iptables -A INPUT -p tcp --syn -j syn-flood 

iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN 

iptables -A syn-flood -j DROP 
</code></pre>

<p>思路二：限制单个ip的最大syn连接数</p>

<pre><code>iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
</code></pre>

<h3>2. 防止DOS攻击</h3>

<p>利用recent模块抵御DOS攻击</p>

<pre><code>iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP 
</code></pre>

<p>单个IP最多连接3个会话</p>

<pre><code>iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH  
</code></pre>

<p>只要是新的连接请求，就把它加入到SSH列表中</p>

<pre><code>Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP  
</code></pre>

<p>5分钟内你的尝试次数达到3次，就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问。</p>

<h3>3. 防止单个ip访问量过大</h3>

<pre><code>iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP 
</code></pre>

<h3>4. 木马反弹</h3>

<pre><code>iptables –A OUTPUT –m state --state NEW –j DROP 
</code></pre>

<h3>5. 防止ping攻击</h3>

<pre><code>iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT 
</code></pre>

<p>个人见解，不足之处求指正。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          